const express = require('express');
const router = express.Router();
const ProductModel = require("../model/ProductModel")
const model = new ProductModel();

// http 请求商品分页处理
router.get('/list/:pageNum/:pageSize', async (req, res) =>{
    let {pageNum,pageSize} = req.params;
    pageNum = parseInt(pageNum)
    pageSize = parseInt(pageSize)
    let result = await model.findPage(pageNum,pageSize)
    res.send(result)
});

// WebSocket 请求轮询推送数据
router.ws("/one/:time", async (wsClient, req)=>{
    let {time} = req.params;
    if(!time) time = 3000

    let list = await model.findAll();
    let index = 0;

    // 定时器实现轮询推送数据(也可根据数据库的变动来立即触发推送)
    let timeId = setInterval(()=>{
        if(index == list.length){
            index = 0;
        }
        // 数据的传输建议全部使用json格式
        wsClient.send(JSON.stringify(list[index++]))
    },time)

    // 扩展停止推送和继续推送的功能
    wsClient.onmessage = function(messageEvent){
        let {data} = messageEvent; // 获取客户端发送过来的数据
        if(data === "begin"){
            timeId = setInterval(()=>{
                if(index == list.length) index = 0;
                wsClient.send(JSON.stringify(list[index++]))
            },1000)
        }else if(data === "end"){
            clearInterval(timeId);
        }
    }

    wsClient.onclose = function () {
        clearInterval(timeId); // 停止定时器
        timeId = null; // 解除引用（释放内存）
    }
})


module.exports = router;
